<?php

/**
 * 物件一覧基底クラス<br />
 *
 * @package    apamanshop
 * @author     SS永田
 * @copyright  コピーライト(要確認)
 */
abstract class Rstobi_BaseController extends Apm_Controller_Base
{
	protected $_rstobi_sort_helper         = null;    //ソート => 一括選択
	protected $_rstobi_sort_btm_helper     = null;    //ソート（最下部用） => 一括選択
	protected $_rstobi_pager_helper        = null;    //ペイジャー
	protected $_rstobi_new_sort_helper     = null;    //ソート（新）
	protected $_rstobi_list_helper         = null;    //一覧から部屋検索
	protected $_rstobi_photo_helper        = null;    //写真から部屋検索
	protected $_rstobi_shop_helper         = null;    //店舗から部屋検索
	protected $_guard_comment_helper       = null;    //ガード文言
	protected $_meyasu_tinryo_helper       = null;    //めやす賃料説明文
	protected $_research_leftpanel_helper  = null;    //左ペイン上部：再検索
	protected $_basic_leftpanel_helper     = null;    //左ペイン上部：基本条件
	protected $_kodawari_leftpanel_helper  = null;    //左ペイン上部：こだわり条件
	protected $_suggest_leftpanel_helper   = null;     //左ペイン追加 2013/02/04：サジェストリンク
	protected $_shinchaku_leftpanel_helper = null;     //左ペイン追加 2013/02/14：新着リンク
	protected $_recommend_helper           = null;    //レコメンド
    protected $_rireki_helper              = null;    //前回閲覧履歴表示
    protected $_okiniiri_helper            = null;    //お気に入り表示
    protected $_no_date_helper             = null;    //該当物件なし
    protected $_hp_keiyaku_helper          = null;    //加盟店HP作成契約
	protected $_mypage_property_helper     = null;    //お気に入り物件用ボタン一覧
	protected $_cross_search_helper        = null;    //クロスカテゴリ検索
	
	// 2011/02/24 遅延表示対応
	protected $_rstobi_block_helper        = null;    //物件情報ブロック

	protected $_search_selcyo_helper       = null;    // 町名選択（SEO用）
	protected $_search_notice_cyo_helper   = null;    // 注目のエリア（SEO用）

	/** 店舗物件検索（条件選択）ヘルパー */
    protected $_sel_condition_helper = null;

    /** URL */
    protected $_baseurl = null;
    /** URL */
    protected $_aplbaseurl = null;
    /** GoogleMapキー */
    protected $_googleMapKey = null;

    /*
     * javascriptファイル
     *  ※subフォルダ以下には配置せず、各モジュールのhelpersフォルダに配置する
     */
    protected $_js_selrstobi_helper = null;   //メインサーチ用
    protected $_js_joukenIns_helper = null;   //検索条件登録

	protected $_is_seo = false;

    /**
     * 初期処理
     */
    public function preDispatch()
    {
    	$shop_helper_path = APPLICATION_PATH . '/modules/shop/views/helpers/';

		// インスタンス生成
    	$loader = new Zend_Application_Module_Autoloader(array(
			'namespace' => 'Search',
			'basePath' => APPLICATION_PATH . '/modules/search',
		));
		$this->_model_search_common = new Search_Model_Common();  //共通クラス（検索導線）
		$this->_model_rstobi_common = new Rstobi_Model_Common();  //共通クラス
		$this->_model_rstobi_pager  = new Rstobi_Model_Pager();   //ペイジャークラス
		$this->_model_rstobi_sort   = new Rstobi_Model_Sort();    //ソートクラス

        $this->_baseurl      = $this->_config['apm']['baseurl'];
        $this->_aplbaseurl   = $this->_config['apm']['apl']['static']['baseurl'];
        $this->_googleMapKey = $this->_config['googleMap']['key'];
		$this->_imageurl     = $this->_config['apm']['apl']['imagesvurl'];

		// 物件一覧用ヘルパー
		$this->_rstobi_pager_helper  = $this->getApmHelper('pager.tpl');                 //ページャー
		$this->_rstobi_sort_helper   = $this->getApmHelper('buken_sort.tpl');            //ソート
		$this->_rstobi_sort_btm_helper = $this->getApmHelper('buken_sort_bottom.tpl');   //ソート（最下部用）
		$this->_rstobi_new_sort_helper = $this->getApmHelper('sort.tpl');                //ソート（新）
		$this->_rstobi_list_helper   = $this->getApmHelper('rstobi_list.tpl');           //一覧から部屋検索
		$this->_rstobi_photo_helper  = $this->getApmHelper('rstobi_photo.tpl');          //写真から部屋検索
		$this->_rstobi_shop_helper   = $this->getApmHelper('rstobi_shop.tpl');           //店舗から部屋検索
		$this->_guard_comment_helper = $this->getApmHelper('guard_comment.tpl');         //ガード文言
		$this->_meyasu_tinryo_helper = $this->getApmHelper('meyasu_tinryo_comment.tpl'); //めやす賃料説明文
		$this->_hp_keiyaku_helper    = $this->getApmHelper('hp_keiyaku.tpl');            //加盟店HP作成契約
		$this->_mypage_property_helper = $this->getApmHelper('mypage_property_helper.tpl');     //お気に入り物件用ボタン一覧
		
		// 左ペイン用ヘルパー
    	$this->_research_leftpanel_helper  = $this->getApmHelper('search/views/helpers/research_leftpanel.tpl');     //左ペイン上部：再検索
    	$this->_basic_leftpanel_helper     = $this->getApmHelper('search/views/helpers/selbasic_leftpanel.tpl');     //左ペイン中部：基本条件
        $this->_kodawari_leftpanel_helper  = $this->getApmHelper('search/views/helpers/selkodawari_leftpanel.tpl');  //左ペイン下部：こだわり条件
        $this->_suggest_leftpanel_helper  = $this->getApmHelper('search/views/helpers/suggestLink.tpl');  //2013/02/05 左ペイン追加：サジェストリンク
        $this->_shinchaku_leftpanel_helper  = $this->getApmHelper('search/views/helpers/shinchakuLink.tpl');  //2013/02/14 左ペイン追加新着リンク
    	
		// OEM用基本・こだわり検索
		$this->_sel_condition_helper = $this->getApmHelper('shinkensaku/views/helpers/sel-condition_helper.tpl');

		// レコメンド用ヘルパー
		$this->_recommend_helper  = $this->getApmHelper('bkn_recommend.tpl'); // レコメンド
		$this->_rireki_helper     = $this->getApmHelper('bkn_rireki.tpl');	  // 前回閲覧履歴
		$this->_okiniiri_helper   = $this->getApmHelper('bkn_okiniiri.tpl');  // お気に入り物件
		$this->_no_date_helper    = $this->getApmHelper('bkn_no_data.tpl');   //レコメンド（該当物件なし）

		//クロスカテゴリ検索
		$this->_cross_search_helper    = $this->getApmHelper('search/views/helpers/cross_search.tpl');

		//加盟店ページ用ヘッダ画面	/* 2011/07/22　AKBｷｬﾝﾍﾟｰﾝ：加盟店ﾒﾝﾊﾞｰｻｲﾄ追加対応 */
		$this->_shoppage_header_helper  = $this->getApmHelper($shop_helper_path . 'shoppage/pageheader_helper.tpl');
		$this->_shoppage_footer_helper  = $this->getApmHelper($shop_helper_path . 'shoppage/pagefooter_helper.tpl');


		$this->_display_path = "";

		// パラメータの取得
		$this->_params = $this->getParameters();

		// SEO判定
		$this->_is_seo = $this->isSeoTarget($this->_params);

        // リクエストデータ設定
        $this->_data['request'] = $this->getParameters();

		// 静的URLなら基本条件パラメータを再セット
		if (isset($this->_params['Pattern'])) {
			Apm_Util_GlobalNavi_Common::setBasicParamsForRstobi($this->_params, false);
		}
		// 静的URL遷移時に、検索パラメータを指定パラメータに変換
		Apm_Bukkenurl::convertSearchParam($this->_params);
		// セッションクリア
		Apm_Session_GlobalNavi::clear();
		// パラメータをセッションにセット
		Apm_Util_GlobalNavi_Common::setSessionParameters($this->_params);

		// TODO

		$this->_static_params   = null;
		$this->_static_pattern  = "";
		$this->_static_category = "";
		if (isset($this->_params['Pattern'])) {
			$this->_static_params   = $this->_params;
			$this->_static_pattern  = $this->_params['Pattern'];
			$this->_static_category = $this->_params['Category'];
			unset($this->_params['Pattern']);
			unset($this->_params['Category']);
			//$this->_data['seo_pattern'] = $this->_static_pattern.'*'.$this->_params['TatemonoTypeCd'].'*'.$this->_params['KodawariId'];
		}

		// フリーワード検索時のみ、非表示とする
		if($this->_params['SrhKbn'] == Apm_Config_Search::SRHKBN_FREEWORD){
			$this->_data['left_kodawari_display_flg'] = true;
			$this->_data['left_cost_display_flg']     = true;
		}

		// パラメータのhiddenタグ生成
		$freewordtmp = "";
		if($this->_params['SrhKbn'] == Apm_Config_Search::SRHKBN_FREEWORD) {
			//フリーワード検索の場合は一旦フリーワードパラメータを削除
			$freewordtmp = $this->_params["freeword"];
			unset($this->_params["freeword"]);
		}
		if (isset($this->_params['research_url'])) unset($this->_params['research_url']);
		$this->_data['hiddenTag'] = Apm_Util::generateHiddenTag($this->_params);

		if($this->_params['SrhKbn'] == Apm_Config_Search::SRHKBN_FREEWORD) {
			//フリーワード検索の場合は削除したパラメータを復活させる
			$this->_params['freeword'] = $freewordtmp;
		}

		//検索条件登録js
		$this->_js_joukenIns_helper = $this->getApmHelper('mypage/views/helpers/js/jouken.tpl');
	}

    /**
     * 後処理
     */
	public function postDispatch()
	{
		// 都道府県別キャンペーン対応
		if (!(array_key_exists('isMobile', $this->_params) && $this->_params['isMobile'] == 1)					// APIでない
			&& !((array_key_exists('OemCd', $this->_params)) && (is_null($this->_params['OemCd']) == false))	// OEMでない
			&& $this->_params['SrhKbn'] != Apm_Config_Search::SRHKBN_SYATAKU									// 社宅でない
			&& (array_key_exists('PrefCd', $this->_params))
		   )
		{
			if (is_array($this->_params['PrefCd'])) {
				foreach ($this->_params['PrefCd'] as $PrefCd) {
					if ($PrefCd >= '50' and $PrefCd <= '53') $PrefCd = '01';
					$this->_data['bnr_pref_'.$PrefCd] = 'on';
				}
			} else {
				$this->_data['bnr_pref_'.$this->_params['PrefCd']] = 'on';
			}
		}

		// パンくず
		$this->_setBreadcrumb();

		// 表示
		$this->display($this->_display_path);

	}

    /**
     * モバイル判定
     */
    protected function isMobile()
    {
    	return (array_key_exists('isMobile', $this->_params) == true && $this->_params['isMobile'] == 1);
    }

    /**
     * モバイルでページング指定があるか判定
     */
    protected function isMobilePaging()
    {
    	return (array_key_exists('start', $this->_params) && array_key_exists('count', $this->_params));
    }

    /**
     * APIデータ設定
     * @param unknown_type $data
     * @param unknown_type $totalCount
     */
    protected function setApiData($data, $totalCount = null)
    {
        $api_data = array();
        $api_data['count'] = (is_null($totalCount)) ? count($data) : $totalCount;
        // ページング処理用
        if ($this->isMobilePaging()) $api_data['pg_count'] = count($data);
        $api_data['data'] = $data;
        $this->_api_data = $api_data;
    }

	/*
	* Cookiesによる物件検索条件の保存設定
	* @param array $params
	*
	*/
	public function setBukkenSrhCookies($params)
	{
		//COOKIE保存期間 :: 30日間
		$savetime = time() + 30*24*60*60;

		//前物件検索条件パラメータがある場合、削除
		if(!empty($_COOKIE["bukkensearch"]) && isset($_COOKIE["bukkensearch"]))
		{
			foreach($_COOKIE["bukkensearch"] as $delkey1 => $delval1)
			{
				//$_COOKIE["bukkensearch"]が配列の場合
				if(is_array($delval1))
				{
					foreach($delval1 as $delkey2 => $delval2)
					{
						setcookie("bukkensearch[$delkey1][$delkey2]","",time() - 30*24*60*60);
					}
				}
				//$_COOKIE["bukkensearch"]が変数の場合
				else
				{
					setcookie("bukkensearch[$delkey1]","", time() - 30*24*60*60);
				}
			}
		}

		//最新の物件検索条件パラメータをCOOKIEに保存
		if(!empty($params) && isset($params) )
		{
			foreach($params as $key1 => $val1)
			{
				//$paramsが配列の場合
				if(is_array($val1))
				{
					foreach($val1 as $key2 => $val2)
					{
						setcookie("bukkensearch[$key1][$key2]" , $val2, $savetime);
					}
				}
				//$paramsが変数の場合
				else
				{
					setcookie("bukkensearch[$key1]" , $val1 , $savetime);
				}
			}
		}

	}

   /*
	* Cookiesによる物件検索条件の取得設定
	* @param  array $params
	* @return array $getbukkensrh
	*/
	public function getBukkenSrhCookies()
	{
		$getbukkensrh = array();
		//前回物件検索の取得
		$getbukkensrh = $_COOKIE["bukkensearch"];

		return $getbukkensrh;
	}

	/*
	 * パンくずを生成
	 * @return void
	 */
	public function _setBreadcrumb()
	{
		// 静的URLからの遷移かチェック
		if(empty($this->_static_pattern))
		{
			// **動的URLのパンくず設定**
	    	$loader = new Zend_Application_Module_Autoloader(array(
				'namespace' => 'Search',
				'basePath' => APPLICATION_PATH . '/modules/search',
			));
			$_model_breadcrumb = new Search_Model_Breadcrumb($this->_breadcrumb);

			// キーワード検索の場合、初期化
			if ($this->_params['SrhKbn'] == Apm_Config_Search::SRHKBN_FREEWORD)
			{
				$this->_breadcrumb->reset();
				$this->_breadcrumb->add(Apm_Config_Search::BREADCRUMB_TOP, $this->_baseurl);
			}
			// 家賃相場検索でKEY=controllerでない場合、初期化
			if ($this->_params['SrhKbn'] == Apm_Config_Search::SRHKBN_YACHINSOUBA)
			{
				$bread_data = $this->_breadcrumb->getDataByIndex(1);
				$bread_key  = $bread_data['key'];
				if ($bread_key != Apm_Bukkenbreadcrumb::SRH_BREAD_KBN.$this->_params['SrhKbn']) {
					$this->_breadcrumb->reset();
					$this->_breadcrumb->add(Apm_Config_Search::BREADCRUMB_TOP, $this->_baseurl);
				}
			}

			// 現在地のパンくずを設定
			$_model_breadcrumb->_getCurrentBreadcrumb($this->_params, $this->_data['research_data'], "rstobi");

		}
		else
		{
			// **静的URLのパンくず生成**
			Apm_Bukkenbreadcrumb::generateBukkenbreadcrumb($this->_static_params, $this->_data['research_data'], $this->_breadcrumb);
		}

		$this->setBreadCrumb($this->_breadcrumb->generateBreadcrumb());
	}

	/*
	 * SEO対象ページかチェックする
	 */
	public function isSeoTarget($params)
	{
		// パターン情報が存在すること。
		if (empty($params['Pattern'])) return false;

		// SEOパラメータ以外のパラメータが存在しないこと。
		$seoParams = array(
						  'Pattern', 'Category', 'SrhKbn', 'SrhType'
						, 'TatemonoTypeCd', 'KodawariId'
						, 'AreaCd', 'PrefName', 'PrefCd', 'first_check'
						, 'CityCd', 'OrgCityCd', 'TownCd', 'OrgTownCd'
						, 'RailCd', 'StCd', 'OrgStCd'
						, 'RstobiDispType', 'SortCd', 'page', 'shop_page'
						);
		
		$ret = true;
		foreach ($params as $key => $val)
		{
			if (!in_array($key, $seoParams))
			{
				$ret = false;
				break;
			}
		}
		
		return $ret;
	}

	/*
	 * SEO対象ページかチェックする（物件一覧用）
	 *  Ajaxの廃止で必要なくなるはず…
	 */
	public function isSeoTargetForList($params)
	{
		// seo_patternパラメータが存在していること。
		if (empty($params['seo_pattern'])) return false;

		// 検索区分が住所、沿線・駅、住居形態、こだわりのどれか
		if (   $params['SrhKbn'] != Apm_Config_Search::SRHKBN_JYUSYO
			&& $params['SrhKbn'] != Apm_Config_Search::SRHKBN_ENSENEKI
			&& $params['SrhKbn'] != Apm_Config_Search::SRHKBN_JYUKYOKEITAI
			&& $params['SrhKbn'] != Apm_Config_Search::SRHKBN_KODAWARI )
		{
			return false;
		}

		$ret = true;
		// クロスカテゴリ条件を取得
		$kodawariPrm = array();
		$seo_arr     = explode('*',$params['seo_pattern']);
		//// 住居形態
		$typeCd      = $seo_arr[1];
		if (!empty($typeCd)) {
			$kodawariPrm[] = 'syubetu'.$typeCd;
		}
		//// こだわり
		$kodawariArr = Apm_Config_Search::$KODAWARI_ID_PRM_LIST[$seo_arr[2]];
		if (!empty($kodawariArr)) {
			foreach ($kodawariArr['prm'] as $value) {
				$kodawariPrm[] = $value['param'];
			}
		}

		// 災害時支援住宅を除く
		if ($seo_arr[2] == '38' || $seo_arr[2] == '39') return false;

		// クロスカテゴリ条件がパラメータに存在していること。
		foreach ($kodawariPrm as $key => $val)
		{
			if (!array_key_exists($val, $params))
			{
				$ret = false;
				break;
			}
		}
		if (!$ret) return $ret;

		// 検索条件が存在していないこと。
		foreach ($params as $key => $val)
		{
			$flag = true;
			switch ($key)
			{
				case 'tinryo1':
					if ($val != '0') $flag = false;
				break;
				case 'tinryo2':
					if ($val != '9999999') $flag = false;
				break;
				//case 'meyasu_tinryo':
				//	if ($val != 'normal') $flag = false;
				//break;
				case 'tinryo_jouken2':
				case 'tyusyajyo_komi':
				case 'freerent':
				case 'shikireizero':
				case 'shikikin_nashi':
				case 'reikin_nashi':
				case 'shataku_koujyo':
				case 'heyawari':
				case 'bas_riyou':
					$flag = false;
				break;
				case (substr($key, 0, -1) == 'syubetu'):
					$flag = false;
				break;
				case 'ekitoho':
					if ($val != '0') $flag = false;
				break;
				case 'senyu1':
					if ($val != '1') $flag = false;
				break;
				case 'senyu2':
					if ($val != '99999') $flag = false;
				break;
				case (substr($key, 0, -2) == 'madori'):
					$flag = false;
				break;
				case 'built':
					if ($val != '0') $flag = false;
				break;
				case 'jyohou':
					if ($val != '0') $flag = false;
				break;
				case (substr($key, 0, 8) == 'kodawari'):
					$flag = false;
				break;
				case (substr($key, 0, 8) == 'campaign'):
					$flag = false;
				break;
				case 'syokihiyo':
					if ($val != '0') $flag = false;
				break;
			}
			// クロスカテゴリ条件を除く
			if (!$flag && !in_array($key, $kodawariPrm))
			{
				$ret = false;
				break;
			}
		}
		
		return $ret;
	}

	/*
	 * SEO対象ページかチェックする（物件一覧用）
	 */
	public function isSeoTargetForList2($params)
	{
		// 基本が静的URLであること
		if (!$this->_is_seo) return false;

		// 災害時支援住宅を除く
		if ($params['KodawariId'] == '38' || $params['KodawariId'] == '39') return false;

		$ret = true;
		// クロスカテゴリ条件を取得
		$kodawariPrm = array();
		//// 住居形態
		$typeCd      = $params['TatemonoTypeCd'];
		if (!empty($typeCd)) {
			$kodawariPrm[] = 'syubetu'.$typeCd;
		}
		//// こだわり
		$kodawariArr = Apm_Config_Search::$KODAWARI_ID_PRM_LIST[$params['KodawariId']];
		if (!empty($kodawariArr)) {
			foreach ($kodawariArr['prm'] as $value) {
				$kodawariPrm[] = $value['param'];
			}
		}

		// クロスカテゴリ条件がパラメータに存在していること。
		foreach ($kodawariPrm as $key => $val)
		{
			if (!array_key_exists($val, $params))
			{
				$ret = false;
				break;
			}
		}
		if (!$ret) return $ret;

		// 検索条件が存在していないこと。
		foreach ($params as $key => $val)
		{
			$flag = true;
			switch ($key)
			{
				case 'tinryo1':
					if ($val != '0') $flag = false;
				break;
				case 'tinryo2':
					if ($val != '9999999') $flag = false;
				break;
				//case 'meyasu_tinryo':
				//	if ($val != 'normal') $flag = false;
				//break;
				case 'tinryo_jouken2':
				case 'tyusyajyo_komi':
				case 'freerent':
				case 'shikireizero':
				case 'shikikin_nashi':
				case 'reikin_nashi':
				case 'shataku_koujyo':
				case 'heyawari':
				case 'bas_riyou':
					$flag = false;
				break;
				case (substr($key, 0, -1) == 'syubetu'):
					$flag = false;
				break;
				case 'ekitoho':
					if ($val != '0') $flag = false;
				break;
				case 'senyu1':
					if ($val != '1') $flag = false;
				break;
				case 'senyu2':
					if ($val != '99999') $flag = false;
				break;
				case (substr($key, 0, -2) == 'madori'):
					$flag = false;
				break;
				case 'built':
					if ($val != '0') $flag = false;
				break;
				case 'jyohou':
					if ($val != '0') $flag = false;
				break;
				case (substr($key, 0, 8) == 'kodawari'):
					$flag = false;
				break;
				case (substr($key, 0, 8) == 'campaign'):
					$flag = false;
				break;
				case 'syokihiyo':
					if ($val != '0') $flag = false;
				break;
				case 'dispCount':
					if ($val != '10') $flag = false;
				break;
			}
			// クロスカテゴリ条件を除く
			if (!$flag && !in_array($key, $kodawariPrm))
			{
				$ret = false;
				break;
			}
		}
		
		return $ret;
	}

}
?>